﻿using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using WatiN.Core;
using WatiN.Core.DialogHandlers;
using System.Diagnostics;
using System.Collections.Generic;
using System.Linq;
using System.Data.Linq;
using tea.DB;
using tea.BL;
using Util;

namespace tea.Tests
{
    [TestClass]
    public class 강의관리
    {
        [ClassInitialize]
        public static void DB테스트준비(TestContext context)
        {
            DB.초기화();
        }

        string[][,] 과목목록 = new string[][,] {
            new string[,] { { "학기", "1학기" }, { "강의명", "과학" } },
            new string[,] { { "학기", "2학기" }, { "강의명", "역사" } },
            new string[,] { { "학기", "매학기" }, { "강의명", "사회" } },
            new string[,] { { "학기", "1학기" }, { "강의명", "국어" } },
            new string[,] { { "학기", "2학기" }, { "강의명", "영어" } },
            new string[,] { { "학기", "매학기" }, { "강의명", "수학" } }
        };

        int[,] 결과목록 = new int[,] {
            { 1, 0, 0 },
            { 1, 1, 0 },
            { 1, 1, 1 },
            { 2, 1, 1 },
            { 2, 2, 1 },
            { 2, 2, 2 },
        };

        [TestMethod]
        public void 강의관리테스트1()
        {
            string s;
            IE ie = new IE("http://localhost:6378/Guest/Login?ReturnUrl=%2f");

            // 로그인하고
            로그인.로그인하기("staff", "staff", ie);

            // 이력서 화면으로 이동
            ie.Link(Find.ByText("강의관리")).Click();
            Assert.IsTrue(ie.Url.Contains("/Lecture/List"));
            Assert.AreEqual(ie.Eval("$('.span4:nth-child(1) tbody tr').length"), "0");
            Assert.AreEqual(ie.Eval("$('.span4:nth-child(2) tbody tr').length"), "0");
            Assert.AreEqual(ie.Eval("$('.span4:nth-child(3) tbody tr').length"), "0");

            // 강의등록
            for (int i = 0; i < 과목목록.Length; ++i) {
                ie.Link(Find.BySelector(".btn-primary")).Click();
                ie.폼데이터입력(과목목록[i]);
                ie.Button(Find.ByText("저장")).Click();
                ie.WaitAjax();

                Assert.AreEqual(ie.Eval("$('.span4:nth-child(1) tbody tr').length"), 결과목록[i, 0].ToString());
                Assert.AreEqual(ie.Eval("$('.span4:nth-child(2) tbody tr').length"), 결과목록[i, 1].ToString());
                Assert.AreEqual(ie.Eval("$('.span4:nth-child(3) tbody tr').length"), 결과목록[i, 2].ToString());

                var child = i % 3 + 1;
                s = ie.Eval("$('.span4:nth-child(" + child + ")').html()");
                Assert.IsTrue(s.Contains(과목목록[i][1,1]));
            }

            // 강의삭제
            for (int i = 과목목록.Length - 1; i >= 0 ; --i) {
                Assert.AreEqual(ie.Eval("$('.span4:nth-child(1) tbody tr').length"), 결과목록[i, 0].ToString());
                Assert.AreEqual(ie.Eval("$('.span4:nth-child(2) tbody tr').length"), 결과목록[i, 1].ToString());
                Assert.AreEqual(ie.Eval("$('.span4:nth-child(3) tbody tr').length"), 결과목록[i, 2].ToString());

                var child = i % 3 + 1;
                ie.CheckBox(Find.BySelector(".span4:nth-child(" + child + ") tr:last-child input")).Checked = true;

                ie.Link(Find.ByText("삭제")).Click();
                ie.WaitAjax();
                s = ie.Eval("$('.row').html()");
                Assert.IsFalse(s.Contains(과목목록[i][1, 1]));
            }

            로그인.로그아웃하기(ie);
            ie.WaitForComplete();
            ie.Dispose();
        }

        [TestMethod]
        public void 강의관리테스트2()
        {
            string s;
            IE ie = new IE("http://localhost:6378/Guest/Login?ReturnUrl=%2f");

            // 로그인하고
            로그인.로그인하기("staff", "staff", ie);

            // 이력서 화면으로 이동
            ie.Link(Find.ByText("강의관리")).Click();
            Assert.IsTrue(ie.Url.Contains("/Lecture/List"));

            // 과학, 역사 등록
            for (int i=0; i < 2; ++i) {
                ie.Link(Find.BySelector(".btn-primary")).Click();
                ie.폼데이터입력(과목목록[i]);
                ie.Button(Find.ByText("저장")).Click();
                ie.WaitAjax();
            }

            // 과학 강의 지원 등록
            DB.사용자생성("test1", "test", "테스트1", "test@test.com");
            var 채용ID = DB.채용생성(DateTime.Now.AddMonths(-1), DateTime.Now.AddMonths(1), "채용내용");
            var 지원ID = DB.지원생성("test1", 채용ID);
            var 지원강의ID = DB.지원강의생성(지원ID, "과학");

            // 과학, 역사 삭제
            ie.Eval("$('.span4 input').attr('checked',true)");
            ie.Link(Find.ByText("삭제")).Click();
            Assert.IsFalse(ie.ContainsText("역사"));
            Assert.IsTrue(ie.ContainsText("과학"));
            Assert.IsTrue(ie.ContainsText("삭제됨"));

            // 과학 삭제 취소
            ie.Eval("$('.span4 input').attr('checked',true)");
            ie.Link(Find.ByText("삭제취소")).Click();
            Assert.IsTrue(ie.ContainsText("과학"));
            Assert.IsFalse(ie.ContainsText("삭제됨"));

            // 과학 삭제
            ie.Eval("$('.span4 input').attr('checked',true)");
            ie.Link(Find.ByText("삭제")).Click();
            Assert.IsTrue(ie.ContainsText("과학"));
            Assert.IsTrue(ie.ContainsText("삭제됨"));

            // 과학 중복 입력 -> 삭제된 과목이 경우 삭제 취소 됨.
            ie.Link(Find.BySelector(".btn-primary")).Click();
            ie.폼데이터입력(과목목록[0]);
            ie.Button(Find.ByText("저장")).Click();
            ie.WaitAjax();
            Assert.IsTrue(ie.ContainsText("과학"));
            Assert.IsFalse(ie.ContainsText("삭제됨"));

            // 과학 중복 입력 -> 중목 에러 메시지 출력
            ie.Link(Find.BySelector(".btn-primary")).Click();
            ie.폼데이터입력(과목목록[0]);
            ie.버튼누르고메시지확인(".btn-primary", "이미");
            ie.Link(Find.ByText("취소")).Click();

            로그인.로그아웃하기(ie);
            ie.WaitForComplete();
            ie.Dispose();
        }

    }

}
